/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package PanelesDeMenu;

import PanelDeProductos.Producto;
import PanelesDePlatos.Plato;
import PanelesDeTrabajo.PanelPrincipalMenu;
import com.google.gson.Gson;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFileChooser;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import net.miginfocom.swing.MigLayout;

/**
 *
 * @author Anonymus
 */
public class PanelCrearMenu extends JPanel implements ActionListener, KeyListener
{
    JPanel panel1;
    JPanel panel2;
    JPanel panel3;
    JPanel panel4;
    JPanel panelAux1;
    JPanel panelAux2;
    JPanel panelAux3;
    JPanel panelAux4;
    
    
    //COMPONENTES
    //Labels
    JLabel LNombre;
    JLabel LPrecio;
    JLabel LFoto;
    JLabel LCalorias;
    JLabel LDescripcion;
    JLabel LRecomendacion;
    JLabel LPlato;
    JLabel LProducto;
    //TextFields
    JTextField TNombre;
    JTextField TPrecio;
    JTextField TCalorias;
    //TextAreas
    JTextArea TDescripcion;
    JTextArea TRecomendacion;
    JScrollPane scrollDescripcion;
    JScrollPane scrollRecomendacion;
    //Table
    JTable tablaComponentes;
    DefaultTableModel modelo;
    JScrollPane scrollTabla;
    //ComboBox
    JComboBox comboBoxPlatos;
    JComboBox comboBoxProductos;
    //Buttons
    JButton buscar;
    JButton añadir1;
    JButton añadir2;
    JButton eliminar;
    JButton crearMenu;
    
    private JPanel panelFoto;
    private ImageIcon icon;
    private JLabel labelFotoVisible;
    private ArrayList<Plato> platos = new ArrayList<Plato>();
    private ArrayList<Producto> productos = new ArrayList<Producto>();
    private Gson gson = new Gson();

    public PanelCrearMenu() 
    {
        icon = new ImageIcon("src/Resource/sin_foto.PNG");
        ImageIcon icon2 = new ImageIcon(icon.getImage().getScaledInstance(200, 100, Image.SCALE_DEFAULT));
        
        this.setLayout(new BorderLayout());
        panel1 = new JPanel(new BorderLayout());
        panelAux1 = new JPanel(new MigLayout());
        panelAux2 = new JPanel(new MigLayout());
        panel2 = new JPanel(new MigLayout());
        panelAux3 = new JPanel(new BorderLayout());
        panelAux4 = new JPanel(new BorderLayout());
        panel3 = new JPanel(new MigLayout());
        panel4 = new JPanel(new BorderLayout());
        this.panelFoto = new JPanel();
        this.panelFoto.setSize(new Dimension(10,10));
        this.panelFoto.setLayout(new MigLayout());
        
        ////////LABELS//////////////////////////////////////////////////////////
    /**/LNombre = new JLabel("Nombre: ");
        LPrecio = new JLabel("Precio: $");
        LFoto = new JLabel("Foto: ");
        LCalorias = new JLabel("Aporte Calórico: (Kcal)");
        LDescripcion = new JLabel("Descripción ");
        LRecomendacion = new JLabel("Recomendación ");
        LPlato = new JLabel("Plato");
        LProducto = new JLabel("Producto");
        labelFotoVisible = new JLabel(icon2);
        this.panelFoto.add(labelFotoVisible);/**/
        ////////////////////////////////////////////////////////////////////////
        ////////TEXTFIELDS//////////////////////////////////////////////////////
    /**/TNombre = new JTextField(80);
        TPrecio = new JTextField(10);
        TPrecio.setText("0");
        TCalorias = new JTextField(10);
        TCalorias.setEditable(false);/**/
        ////////////////////////////////////////////////////////////////////////
        TDescripcion = new JTextArea(10, 28);
        TRecomendacion = new JTextArea(10, 28);
        
        scrollDescripcion = new JScrollPane(this.TDescripcion);
        scrollRecomendacion = new JScrollPane(this.TRecomendacion);
        
        modelo = new DefaultTableModel();
        tablaComponentes = new JTable(modelo);
        modelo.addColumn("Nombre");
        modelo.addColumn("Aporte Calórico");
        tablaComponentes.getTableHeader().setReorderingAllowed(false);
        scrollTabla = new JScrollPane(this.tablaComponentes);
        scrollTabla.setViewportView(this.tablaComponentes);
        
        ///////COMBOBOXS////////////////////////////////////////////////////////
    /**/comboBoxPlatos = new JComboBox();
        comboBoxProductos = new JComboBox();
        cargarPlatos();/**/
        ////////////////////////////////////////////////////////////////////////
        ///////////BOTONES//////////////////////////////////////////////////////
    /**/ImageIcon iconBoton1 = new ImageIcon("src/Resource/plus.JPG");
        ImageIcon iconBoton2 = new ImageIcon("src/Resource/plus.JPG");
        ImageIcon iconBoton3 = new ImageIcon("src/Resource/crearMenu.PNG");
        ImageIcon iconBoton4 = new ImageIcon("src/Resource/eliminar.PNG");
//        ImageIcon iconBoton5 = new ImageIcon("src/Resource/cargarFoto.JPG");
        añadir1 = new JButton(iconBoton1);
        añadir2 = new JButton(iconBoton2);
        crearMenu = new JButton(iconBoton3);
        eliminar = new JButton(iconBoton4);
        buscar  = new JButton("   Buscar   ");
        
        añadir1.setBorder(null);
        añadir2.setBorder(null);
        buscar.setBorder(null);
        crearMenu.setBorder(null);
        eliminar.setBorder(null);
        
        añadir1.addActionListener(this);
        añadir2.addActionListener(this);
        buscar.addActionListener(this);
        crearMenu.addActionListener(this);
        eliminar.addActionListener(this);
        TPrecio.addKeyListener(this);/**/
        ////////////////////////////////////////////////////////////////////////
        ////Se agregan todos los componentes del panel crear menu
        this.panelAux1.add(this.LNombre);
        this.panelAux1.add(this.TNombre);
        this.panelAux2.add(this.LPrecio);
        this.panelAux2.add(this.TPrecio);
        this.panelAux2.add(this.LCalorias);
        this.panelAux2.add(this.TCalorias);
        this.panelAux2.add(this.LFoto);
        this.panelAux2.add(this.buscar);
        
        this.panel1.add(this.panelAux1, BorderLayout.NORTH);
        this.panel1.add(this.panelAux2, BorderLayout.CENTER);
        
        this.panel2.add(this.LPlato);
        this.panel2.add(this.comboBoxPlatos);
        this.panel2.add(this.añadir1, "wrap");
        this.panel2.add(this.LProducto);
        this.panel2.add(this.comboBoxProductos);
        this.panel2.add(this.añadir2);
        
        this.panelAux4.add(this.eliminar, BorderLayout.WEST);
        
        this.panel3.add(this.panelFoto, "wrap");
        this.panel3.add(this.LDescripcion,"wrap");
        this.panel3.add(this.scrollDescripcion,"wrap");
        this.panel3.add(this.LRecomendacion,"wrap");
        this.panel3.add(this.scrollRecomendacion,"wrap");
       
        this.panelAux3.add(this.panel2, BorderLayout.NORTH);
        this.panelAux3.add(this.scrollTabla, BorderLayout.CENTER);
        this.panelAux3.add(this.panel3, BorderLayout.EAST);
        this.panelAux3.add(this.panelAux4, BorderLayout.SOUTH);
        
        this.panel4.add(this.crearMenu, BorderLayout.EAST);
        
        
        this.add(this.panel1, BorderLayout.NORTH);
        this.add(this.panelAux3, BorderLayout.WEST);
        this.add(this.panel4, BorderLayout.SOUTH);
        
        leerTxtPlatos();
        leerTextProductos();
        
    }
    
    public void cargarPlatos()
    {
        
    }

    @Override
    public void actionPerformed(ActionEvent e)
    {
        
        if(e.getSource()==this.buscar)
        {
            System.out.println("se apreta el boton buscar Foto");
            JFileChooser fileChooser = new JFileChooser();
            int returnValue = fileChooser.showOpenDialog(null);// Nos retorna un entero
                
          // Si apretamos en aceptar un archivo ocurrira esto
            if (returnValue == JFileChooser.APPROVE_OPTION)
            {
                File archivo = fileChooser.getSelectedFile();
                ImageIcon imagen = new ImageIcon(archivo.getAbsolutePath());
                ImageIcon imagen2 = imagenRedimensionada(imagen);
            } 
        }
        
        if(e.getSource()==this.añadir1)
        {
            System.out.println("se apreta el boton añadir1");
        }
        
        if(e.getSource()==this.añadir2)
        {
            System.out.println("se apreta el boton añadir2");
        }
        
        if(e.getSource()==this.crearMenu)
        {
            int num = Integer.parseInt(TPrecio.getText());
            
            if (TPrecio.getText().isEmpty() || TNombre.getText().isEmpty() ||
                TDescripcion.getText().isEmpty() || TRecomendacion.getText().isEmpty()) //si alguno está vacío
            {
                JOptionPane.showMessageDialog(null, "Falta uno o más campos que rellenar, por favor rellénelos!", "Falta de información",JOptionPane.ERROR_MESSAGE);
            }
            if (num <= 0)
            {
                JOptionPane.showMessageDialog(null, "Precio solo permite valores mayores que cero", "Error de datos",JOptionPane.ERROR_MESSAGE);
            }
        }
        
        if(e.getSource()==this.eliminar)
        {
            System.out.println("se apreta el boton eliminar");
        }
    }
    
    @Override
    public void keyTyped(KeyEvent e) 
    {
        Object componente = e.getComponent();
        int key = (int)e.getKeyChar();
        
        if (componente == TPrecio)
        {
            if ((key >= 97 && key <= 122) || (key >= 65 && key <= 90))
            {
                e.consume();
                JOptionPane.showMessageDialog(null, "No puede ingresar letras, sólo valores numéricos!", "Error de entrada",JOptionPane.ERROR_MESSAGE);
            }
        }
    }

    @Override
    public void keyPressed(KeyEvent e) 
    {
        
    }

    @Override
    public void keyReleased(KeyEvent e) 
    {
        
    }
    
    public ImageIcon imagenRedimensionada(ImageIcon icon)
    {
        if (icon.getIconHeight() > 100 && icon.getIconHeight() > 130)
        {
            ImageIcon icon2 = new ImageIcon(icon.getImage().getScaledInstance(150, 130, Image.SCALE_DEFAULT));
            return icon2;
        }
        else
        {
            return icon;
        }
    }
    
    public void llenarComboBoxPlatos()
    {
        comboBoxPlatos.removeAllItems();
        
        for (int i=0; i<platos.size(); i++)
        {
            comboBoxPlatos.addItem(platos.get(i).getNombre());
        }
    }
    
    public void llenarComboBoxProductos()
    {
        comboBoxProductos.removeAllItems();
        
        for (int i=0; i<productos.size(); i++)
        {
            comboBoxProductos.addItem(productos.get(i).getNombre());
        }
    }
    
    public void leerTxtPlatos()
    {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        platos.clear();
        
        try
        {
            archivo = new File ("C:\\BaseDeDatos\\platos.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            String linea;
            
            while((linea=br.readLine())!=null)
            {
                System.out.println(linea);
                Plato plato = (Plato)gson.fromJson(linea, Plato.class);
                platos.add(plato);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( null != fr )
                {   
                    fr.close();     
                }                  
            }
            catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
    }
    
    public void leerTextProductos()
    {
        File archivo = null;
        FileReader fr = null;
        BufferedReader br = null;
        productos.clear();
        
        try
        {
            archivo = new File ("C:\\BaseDeDatos\\productos.txt");
            fr = new FileReader (archivo);
            br = new BufferedReader(fr);
            
            String linea;
            
            while((linea=br.readLine())!=null)
            {
                System.out.println(linea);
                Producto producto = (Producto)gson.fromJson(linea, Producto.class);
                productos.add(producto);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        finally
        {
            try
            {
                if( null != fr )
                {   
                    fr.close();     
                }                  
            }
            catch (Exception e2)
            {
                e2.printStackTrace();
            }
        }
    }
}